// 有一个长度均为n且仅由数字字符0～9组成的字符串，下标从0到n -1，
// 你可以将其视作是一个具有n位的十进制数字num，
// 小蓝可以从num中选出一段连续的子串并将子串进行反转，最多反转一次。
// 小蓝想要将选出的子串进行反转后再放入原位置处得到的新的数字numnew满足条件numnew < num，
// 计算一共有多少种不同的子串选择方案，只要两个子串在num 中的位置不完全相同我们就视作是不同的方案。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
string s;
int F(int l, int r) {
    while (l < r) {
        if (s[l] > s[r])return 1;//如果s[l] > s[r]，反转后满足条件 新字符串<原字符串。
        else if (s[l] == s[r]) { l++;r--; }//如果s[l] == s[r]，两边同时缩小区间。
        else break;//如果s[l] < s[r]，不用继续考虑，反转后一定不满足条件，直接退出循环
    }
    return 0;
}
int main(){
    cin >> s;
    int n = s.length();//n是字符串长度
    int ans = 0;//记录答案
    for (int l = 0;l <= n - 2;l++) {//l即left是子串的起始下标，从0开始到n-2（子串长度至少为2，最右侧的最小子串下标为[n-2,n-1],故l最多到n-2）
        for (int r = n - 1;r > l;r--) {//r即right是子串的末尾下标，从s的最末下标n-1到l+1。
            if(F(l,r))ans++;
        }
    }
    cout << ans;
    return 0;
}